package com.hollowlatte.manage.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.hollowlatte.manage.entity.Role;
import com.hollowlatte.manage.entity.User;
import com.hollowlatte.manage.entity.vo.UserVO;

import java.util.List;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author Hollow Latte
 * @since 2021-04-27
 */
public interface UserService extends IService<User> {
    /**
     * 为用户分配角色
     *
     * @param userId 用户id
     * @param roleId 角色id
     * @return 是否有影响行数
     */
    boolean assignRoleForUser(Long userId, Long roleId);

    /**
     * 添加用户，使用MD5加密密码
     *
     * @param userId   用户id
     * @param password 未加密密码
     * @return 是否有影响行数
     */
    boolean saveUser(Long userId, String password);

    /**
     * 修改用户密码
     *
     * @param user User对象
     * @return 是否有影响行数
     */
    boolean updatePassword(User user);


    /**
     * 修改用户角色
     *
     * @param userId        用户id
     * @param newRoleIdList 新角色id列表
     * @return 是否有影响行数
     */
    boolean updateRoleForUser(Long userId, List<Long> newRoleIdList);

    /**
     * 删除用户拥有的角色
     *
     * @param userId 用户id
     * @param roleId 角色名
     * @return 是否有影响行数
     */
    boolean removeRoleOfUser(Long userId, Long roleId);

    /**
     * 删除用户，并删除用户所有的角色（逻辑）
     *
     * @param userId 用户id
     * @return 是否有影响行数
     */
    boolean removeUser(Long userId);

    /**
     * 通过Userid查询具有的角色（三表联查）
     *
     * @param userId 用户id
     * @return 角色对象
     */
    List<Role> listRoleById(Long userId);

    /**
     * 通过角色id查找用户
     *
     * @param roleId 角色id
     * @return 用户列表
     */
    List<User> listByRoleId(Long roleId);

    /**
     * 将User列表填充为UserVO列表
     *
     * @param userList User列表
     * @return UserVO列表
     */
    List<UserVO> convertUserToUserVO(List<User> userList);

    /**
     * 将User填充为UserVO
     *
     * @param user User对象
     * @return UserVO对象
     */
    UserVO convertUserToUserVO(User user);
}
